/**
 * 
 */
package model.persistence.mysql;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.Savepoint;

import model.persistence.DAOManager;

/**
 * @author Giuseppe Fusco (fusgius19@gmail.com)
 *
 */
public class DAOManager_MySQL extends DAOManager{

	private MySQLDBMS mys;
	private StudenteDAO_MySQL studenteDao;
	private TorneoDAO_MySQL torneoDao;
	private GiocatoreDAO_MySQL giocatoreDao;
	private SquadraDAO_MySQL squadraDao;
	private static DAOManager_MySQL instance;
	
	private DAOManager_MySQL(String host, int port, String db, String user, String password) throws ClassNotFoundException, SQLException{
		mys = new MySQLDBMS(host, port, db, user, password);
		studenteDao = new StudenteDAO_MySQL(mys);
		torneoDao = new TorneoDAO_MySQL(mys);
		giocatoreDao = new GiocatoreDAO_MySQL(mys);
		squadraDao = new SquadraDAO_MySQL(mys);
	}
	
	private DAOManager_MySQL() throws ClassNotFoundException, IOException, SQLException{
		mys = new MySQLDBMS();
		studenteDao = new StudenteDAO_MySQL(mys);
		torneoDao = new TorneoDAO_MySQL(mys);
		giocatoreDao = new GiocatoreDAO_MySQL(mys);
		squadraDao = new SquadraDAO_MySQL(mys);
	}
	
	public static DAOManager_MySQL getInstance() throws ClassNotFoundException, IOException, SQLException {
		if(instance==null)
			instance = new DAOManager_MySQL();
		return instance;
	}
	
	public static DAOManager_MySQL getInstance(String host, int port, String db, String user, String password) throws ClassNotFoundException, IOException, SQLException {
		if(instance==null)
			instance = new DAOManager_MySQL(host, port, db, user, password);
		return instance;
	}
	
	public void setInstance(DAOManager_MySQL instance) {
		DAOManager_MySQL.instance = instance;
	}

	public MySQLDBMS getMys() {
		return mys;
	}

	public void setMys(MySQLDBMS mys) {
		this.mys = mys;
	}

	public StudenteDAO_MySQL getStudenteDao() {
		return studenteDao;
	}

	public void setStudenteDao(StudenteDAO_MySQL studenteDao) {
		this.studenteDao = studenteDao;
	}

	public TorneoDAO_MySQL getTorneoDao() {
		return torneoDao;
	}

	public void setTorneoDao(TorneoDAO_MySQL torneoDao) {
		this.torneoDao = torneoDao;
	}

	public GiocatoreDAO_MySQL getGiocatoreDao() {
		return giocatoreDao;
	}

	public void setGiocatoreDao(GiocatoreDAO_MySQL giocatoreDao) {
		this.giocatoreDao = giocatoreDao;
	}

	public SquadraDAO_MySQL getSquadraDao() {
		return squadraDao;
	}

	public void setSquadraDao(SquadraDAO_MySQL squadraDao) {
		this.squadraDao = squadraDao;
	}

	/* (non-Javadoc)
	 * @see model.facade.persistence.DAOManager#rollback()
	 */
	@Override
	public void rollback() throws SQLException {
		// TODO Auto-generated method stub
		mys.getConnection().rollback();
	}

	/* (non-Javadoc)
	 * @see model.facade.persistence.DAOManager#rollback(java.lang.Object)
	 */
	@Override
	public void rollback(Object savePoint) throws SQLException {
		// TODO Auto-generated method stub
		mys.getConnection().rollback((Savepoint) savePoint);
	}

	/* (non-Javadoc)
	 * @see model.facade.persistence.DAOManager#commit()
	 */
	@Override
	public void commit() throws SQLException {
		// TODO Auto-generated method stub
		mys.getConnection().commit();
	}
	
}
